package cn.wolfcode.p2p.util;

import cn.wolfcode.p2p.base.exception.CustomException;
import org.springframework.util.StringUtils;

import java.text.MessageFormat;
import java.util.regex.Pattern;

import static cn.wolfcode.p2p.enums.ErrorCode.*;
import static cn.wolfcode.p2p.util.Constants.*;

/**
 * 断言工具
 */
public class Assert {
    /**
     * 断言对象不为null, 如果为null,抛出异常
     *
     * @param object  是断言的对象
     * @param message 异常信息
     */
    public static void notNull(Object object, String message) {
        if (object == null) {
            throw new CustomException(message);
        }
    }

    /**
     * 断言的字符有长度, 如果没有,抛出异常
     * 如何返回错误信息 : 第二种方式: 接收枚举类
     *
     * @param str     断言的字符串
     * @param message 异常信息
     */
    public static void notNull(String str, String message) {
        if (!StringUtils.hasLength(str)) {
            throw new CustomException(message);
        }
    }

    /**
     * 范围长度断言,不在此范围内则抛出异常
     *
     * @param str
     * @param min
     * @param max
     * @param message
     */
    public static void isRangeLength(String str, int min, int max, String message) {
        notNull(str, message);
        if (str.length() < min || str.length() > max) {
            throw new CustomException(message);
        }
    }

    public static void isLength(String str, int length, String message) {
        notNull(str, message);
        if (str.length() != length) {
            throw new CustomException(message);
        }
    }

    /**
     * 判断手机号格式,格式不对抛出异常
     *
     * @param phoneNum
     * @param errorMessage
     */
    public static void isPhoneNum(String phoneNum, String errorMessage) {
        isLength(phoneNum, LENGTH_PHONENUM, MessageFormat.format(LOGININFO_USERNAME_LENGTH_ERROR.getErrorMessage(),LENGTH_PHONENUM));
        if (!Pattern.matches(Constants.REGEX_PHONENUM, phoneNum)) {
            throw new CustomException(errorMessage);
        }
    }

    /**
     * 数据库查出的结果(存在已注册的手机号条数)需要抛异常
     *
     * @param tag
     * @param errorMessage
     */
    public static void isFalse(boolean tag, String errorMessage) {
        if (tag) {
            throw new CustomException(errorMessage);
        }
    }

    /**
     * 验证密码和确认密码是否相等
     *
     * @param password
     * @param confirmPwd
     * @param errorMessage
     */
    public static void isEquals(String password, String confirmPwd, String errorMessage) {
        notNull(password, errorMessage);
        notNull(confirmPwd, errorMessage);
        if (!confirmPwd.equals(password)) {
            throw new CustomException(errorMessage);
        }
    }

    /**
     * 判断结果和状态码是否相等,相等抛出异常
     * @param str1 返回的结果
     * @param str2 状态码
     * @param errorMessage
     */
    public static void isNotEquals(String str1, String str2, String errorMessage) {
        notNull(str1, errorMessage);
        notNull(str2, errorMessage);
        if (str1.equals(str2)) {
            throw new CustomException(errorMessage);
        }
    }



}
